Presenter.present   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 24
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 21
dl 0
loc 24
ccs 12
cts 12
cp 1
crap 2
rs 9.376
c 0
b 0
f 0
1
import PageRegistry from '@enbock/application-router/Registry';
2
import {PageData} from '@enbock/application-router/Router';
3
import {Observer} from '@enbock/state-value-observer/ValueObserver';
4
import Translator from '../../../Language/Translator';
5
import Model from './Model';
6
7
export default class Presenter {
8
  menuOpenState: Observer<boolean>;
9
  routerObserver: Observer<PageData | null>;
10
  pageRegistry: PageRegistry;
11
  translator: Observer<Translator>;
12
13
  constructor(
14
    menuOpenState: Observer<boolean>,
15
    translator: Observer<Translator>,
16
    routerObserver: Observer<PageData | null>,
17
    pageRegistry: PageRegistry
18
  ) {
19 3
    this.translator = translator;
20 3
    this.menuOpenState = menuOpenState;
21 3
    this.routerObserver = routerObserver;
22 3
    this.pageRegistry = pageRegistry;
23
  }
24
25
  present(): Model {
26 2
    const model: Model = new Model();
27 2
    model.isOpen = this.menuOpenState.value;
28
29 2
    const translator: Translator = this.translator.value;
30 2
    model.translation = {
31
      home: translator.translate('Application.SideMenu.Home'),
32
      settings: translator.translate('Application.SideMenu.Settings')
33
    };
34
35 2
    const pages: PageData[] = this.pageRegistry.getPages();
36 2
    const activePage: string = this.routerObserver.value?.name || '';
37
38 2
    model.pageNames = [];
39 2
    pages.forEach(
40
      (page: PageData) => {
41 4
        model.pageNames.push(page.name);
42 4
        model.isActive[page.name] = (activePage == page.name);
43 4
        model.url[page.name] = page.currentUrl;
44
      }
45
    );
46
47 2
    return model;
48
  }
49
}
50